package com.atguigu.lease.model.base;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;

import java.util.Date;

/*
因为 lease库中
每张表都有 id  create_time  update_time  is_deleted四个字段
如果每个表对应的实体类 都单独写这个属性，以后我们希望对这几个字段进行修改，每个类都要单独修改
我们可以创建一个Base类，将所有表都有的字段 抽取到Base类中统一管理
* */
@Data
public class BaseEntity {
    /*
    @TableId注解：这是 MyBatis-Plus 框架中用于标识主键字段的注解。
    type = IdType.AUTO：明确指定主键生成策略为数据库自增（依赖于数据库的自增机制）
    */
    @TableId(type = IdType.AUTO)
    private Long id;

    /*
    @TableField注解：用于配置字段与数据库列的映射关系
    value = "create_time"：映射到数据库中的create_time列
    fill = FieldFill.INSERT：自动填充策略-仅在插入数据时填充当前时间（记录创建时间）
    */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;

    /*
    value = "update_time"：映射到数据库中的update_time列
    fill = FieldFill.INSERT_UPDATE：自动填充策略-在插入和更新数据时都填充当前时间（记录最后修改时间）
    */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    /*
    @TableField注解：映射到数据库中的is_deleted列
    @TableLogic注解：启用逻辑删除功能（删除操作变为更新操作，将is_deleted设为true）
    @JsonIgnore注解：在JSON序列化时忽略此字段（不返回给前端）
    private Boolean isDeleted = false：默认值false表示未删除状态
    */
    @TableField(value = "is_deleted")
    @TableLogic
    @JsonIgnore
    private Boolean isDeleted = false;
}
